This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

library(ggplot2)
library(dplyr)

cdc.data

despair.data<- subset(cdc.data, death_cause == "Despair")

#covid_data_states<- read.csv("covid_data_states.csv")

covid_TS_counties_long.cases

keeps.despair <- c("county_name","county_fips","death_rate")
despair.data.updated = despair.data[keeps.despair]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated = covid_TS_counties_long.cases[keeps.covid]

COVIDdespair.all = merge(despair.data.updated, covid.data.updated, by.x="county_fips", by.y="countyFIPS")

COVIDdespair<- distinct(COVIDdespair.all)

ggplot(data=COVIDdespair, aes(x=death_rate,y=p_deaths)) +
  geom_point()

cor.test(COVIDdespair$death_rate,COVIDdespair$p_deaths)

ggplot(data=COVIDdespair, aes(x=death_rate, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE)
library(gridExtra)
#>50
cdc.data
#despair.data<- subset(cdc.data, death_cause == "Despair", period == "2015-2017")
despair.data <- cdc.data[ which(cdc.data$death_cause=='Despair'
& cdc.data$period== '2015-2017'), ]

covid_TS_counties_long.cases
#coviddeathallcounties1<- subset(covid_TS_counties_long.cases, date == "2020-03-15")
#coviddeathallcounties <- subset(coviddeathallcounties1, deaths >= 5, select=c("County","countyFIPS","deaths", "p_deaths"))
coviddeathallcounties <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >= 50 ),]
#& covid_TS_counties_long.cases$date=="2020-03-15"), ]
#coviddeathallcounties[coviddeathallcounties$date >= "2020-04-01" & coviddeathallcounties$date <= "2020-04-03",]

keeps.despair <- c("county_name","county_fips","death_rate")
despair.data.updated = despair.data[keeps.despair]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated = coviddeathallcounties[keeps.covid]

COVIDdespair.all = merge(despair.data.updated, covid.data.updated, by.x="county_fips", by.y="countyFIPS")


#COVIDdespair<- distinct(COVIDdespair.all)
COVIDdespair<- distinct(COVIDdespair.all,county_fips, .keep_all= TRUE)

#COVIDdespair <- unique(COVIDdespair[ , 1:3 ] )

#ggplot(data=COVIDdespair, aes(x=death_rate,y=p_deaths)) +
#  geom_point()

cor.test(COVIDdespair$death_rate,COVIDdespair$p_deaths)

    Pearson's product-moment correlation

data:  COVIDdespair$death_rate and COVIDdespair$p_deaths
t = -0.90027, df = 311, p-value = 0.3687
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.16093448  0.06021813
sample estimates:
        cor 
-0.05098315 
#-0.05098315 

ggplot(data=COVIDdespair, aes(x=death_rate, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (>50)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")




#0-50
cdc.data
despair.data <- cdc.data[ which(cdc.data$death_cause=='Despair'
& cdc.data$period== '2015-2017'), ]

covid_TS_counties_long.cases
coviddeathallcountiesunder50 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths <=50 ),]

keeps.despairunder50 <- c("county_name","county_fips","death_rate")
despair.data.updated.under50 = despair.data[keeps.despairunder50]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated = coviddeathallcountiesunder50[keeps.covid]

COVIDdespair.all.under50 = merge(despair.data.updated.under50, covid.data.updated, by.x="county_fips", by.y="countyFIPS")

COVIDdespairunder50<- distinct(COVIDdespair.all.under50,county_fips, .keep_all= TRUE)

cor.test(COVIDdespairunder50$death_rate,COVIDdespairunder50$p_deaths)

    Pearson's product-moment correlation

data:  COVIDdespairunder50$death_rate and COVIDdespairunder50$p_deaths
t = -4.0265, df = 2703, p-value = 5.818e-05
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.11456919 -0.03964255
sample estimates:
        cor 
-0.07721489 
#-0.07721489 
p1<-ggplot(data=COVIDdespairunder50, aes(x=death_rate, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (0-50)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")

log10.covid.0_50<-(log10(COVIDdespairunder50$p_deaths))
log10.despair.0_50<- (log10(COVIDdespairunder50$death_rate))
COVIDdespairunder50$log10covid= log10.covid.0_50
COVIDdespairunder50$log10despair=log10.despair.0_50
p1_5<-ggplot(data=COVIDdespairunder50, aes(x=log10despair, y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (0-50)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")

#50-100
cdc.data
despair.data <- cdc.data[ which(cdc.data$death_cause=='Despair'
& cdc.data$period== '2015-2017'), ]

covid_TS_counties_long.cases
coviddeathallcounties50100 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >=50|covid_TS_counties_long.cases$deaths <=100 ),]

keeps.despair50100 <- c("county_name","county_fips","death_rate")
despair.data.updated.50100 = despair.data[keeps.despair50100]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated50100 = coviddeathallcounties50100[keeps.covid]

COVIDdespair.all.50100 = merge(despair.data.updated.50100, covid.data.updated50100, by.x="county_fips", by.y="countyFIPS")

COVIDdespair50100<- distinct(COVIDdespair.all.50100,county_fips, .keep_all= TRUE)

cor.test(COVIDdespair50100$death_rate,COVIDdespair50100$p_deaths)

    Pearson's product-moment correlation

data:  COVIDdespair50100$death_rate and COVIDdespair50100$p_deaths
t = -1.3486, df = 2703, p-value = 0.1776
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.06355648  0.01176832
sample estimates:
        cor 
-0.02593088 
#-0.02593088 
p2<-ggplot(data=COVIDdespair50100, aes(x=death_rate, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (50-100)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")

log10.covid.50_100<-(log10(COVIDdespair50100$p_deaths))
log10.despair.50_100<- (log10(COVIDdespair50100$death_rate))
COVIDdespair50100$log10covid= log10.covid.50_100
COVIDdespair50100$log10despair=log10.despair.50_100
p2_5<-ggplot(data=COVIDdespair50100, aes(x=log10despair, y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (50-100)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")

#>100
cdc.data
despair.data <- cdc.data[ which(cdc.data$death_cause=='Despair'
& cdc.data$period== '2015-2017'), ]

covid_TS_counties_long.cases
coviddeathallcountiesgreater100 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >=100 ),]

keeps.despairgreater100 <- c("county_name","county_fips","death_rate")
despair.data.updated.greater100 = despair.data[keeps.despairgreater100]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updatedgreater100 = coviddeathallcountiesgreater100[keeps.covid]

COVIDdespair.all.greater100 = merge(despair.data.updated.greater100, covid.data.updatedgreater100, by.x="county_fips", by.y="countyFIPS")

COVIDdespairgreater100<- distinct(COVIDdespair.all.greater100,county_fips, .keep_all= TRUE)

cor.test(COVIDdespairgreater100$death_rate,COVIDdespairgreater100$p_deaths)

    Pearson's product-moment correlation

data:  COVIDdespairgreater100$death_rate and COVIDdespairgreater100$p_deaths
t = -0.97918, df = 187, p-value = 0.3288
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.21199107  0.07204285
sample estimates:
        cor 
-0.07142184 
#-0.07142184
p3<-ggplot(data=COVIDdespairgreater100, aes(x=death_rate, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (>100)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")

log10.covid.greater100<-(log10(COVIDdespairgreater100$p_deaths))
log10.despair.greater100<- (log10(COVIDdespairgreater100$death_rate))
COVIDdespairgreater100$log10covid= log10.covid.greater100
COVIDdespairgreater100$log10despair=log10.despair.greater100
p3_5<-ggplot(data=COVIDdespairgreater100, aes(x=log10despair, y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Deaths of Despair Rate vs COVID Mortality Rate (>100)") +
  xlab("Death of Despair Rate") +
  ylab("COVID Mortality Rate")

grid.arrange(p1, p2, p3, nrow = 3)

grid.arrange(p1_5,p2_5,p3_5, nrow =3)

p1

p2

p3

p1_5

p2_5

p3_5

cor.test(COVIDdespairunder50$log10covid,COVIDdespairunder50$log10despair)
cor.test(COVIDdespair50100$log10covid,COVIDdespair50100$log10despair)
cor.test(COVIDdespairgreater100$log10covid,COVIDdespairgreater100$log10despair)

suicide

library(tidyverse)
library(dplyr)

aaa<-read.csv("2020CHR.csv")

data.suicide <- aaa %>% dplyr::select(FIPS, State, County, Suicide.Rate..Age.Adjusted.)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcounties <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >= 50 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated = coviddeathallcounties[keeps.covid]

COVIDsuicide.all = merge(data.suicide, covid.data.updated, by.x="FIPS", by.y="countyFIPS")

COVIDsuicide<- distinct(COVIDsuicide.all,FIPS, .keep_all= TRUE)

cor.test(COVIDsuicide$Suicide.Rate..Age.Adjusted.,COVIDsuicide$p_deaths)

    Pearson's product-moment correlation

data:  COVIDsuicide$Suicide.Rate..Age.Adjusted. and COVIDsuicide$p_deaths
t = -2.7007, df = 368, p-value = 0.007239
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.23798074 -0.03799566
sample estimates:
       cor 
-0.1394094 
#-0.139

ggplot(data=COVIDsuicide, aes(x=Suicide.Rate..Age.Adjusted., y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (>50)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")



#50
aaa<-read.csv("2020CHR.csv")

data.suicide <- aaa %>% dplyr::select(FIPS, State, County, Suicide.Rate..Age.Adjusted.)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcountiesunder50 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths <= 50 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updatedunder50 = coviddeathallcountiesunder50[keeps.covid]

COVIDsuicide.all.under50 = merge(data.suicide, covid.data.updatedunder50, by.x="FIPS", by.y="countyFIPS")

COVIDsuicide.under50<- distinct(COVIDsuicide.all.under50,FIPS, .keep_all= TRUE)

cor.test(COVIDsuicide.under50$Suicide.Rate..Age.Adjusted.,COVIDsuicide.under50$p_deaths)

    Pearson's product-moment correlation

data:  COVIDsuicide.under50$Suicide.Rate..Age.Adjusted. and COVIDsuicide.under50$p_deaths
t = -5.1303, df = 2367, p-value = 3.127e-07
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.14453012 -0.06486999
sample estimates:
       cor 
-0.1048683 
#-0.139

g1<-ggplot(data=COVIDsuicide.under50, aes(x=Suicide.Rate..Age.Adjusted., y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (0-50)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")

log10.covid.under50<-(log10(COVIDsuicide.under50$p_deaths))
COVIDsuicide.under50$log10covid= log10.covid.under50
g1_5<-ggplot(data=COVIDsuicide.under50, aes(x=Suicide.Rate..Age.Adjusted., y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (0-50)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")

#50-100
aaa<-read.csv("2020CHR.csv")

data.suicide <- aaa %>% dplyr::select(FIPS, State, County, Suicide.Rate..Age.Adjusted.)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcounties50_100 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >= 50|covid_TS_counties_long.cases$deaths <= 100 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated50_100 = coviddeathallcounties50_100[keeps.covid]

COVIDsuicide.all.50_100 = merge(data.suicide, covid.data.updated50_100, by.x="FIPS", by.y="countyFIPS")

COVIDsuicide.50_100<- distinct(COVIDsuicide.all.50_100,FIPS, .keep_all= TRUE)

cor.test(COVIDsuicide.50_100$Suicide.Rate..Age.Adjusted.,COVIDsuicide.50_100$p_deaths)

    Pearson's product-moment correlation

data:  COVIDsuicide.50_100$Suicide.Rate..Age.Adjusted. and COVIDsuicide.50_100$p_deaths
t = -8.149, df = 2367, p-value = 5.876e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.2041096 -0.1257597
sample estimates:
       cor 
-0.1651953 
#-0.139

g2<-ggplot(data=COVIDsuicide.50_100, aes(x=Suicide.Rate..Age.Adjusted., y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (50-100)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")

log10.covid.50_100<-(log10(COVIDsuicide.50_100$p_deaths))
COVIDsuicide.50_100$log10covid= log10.covid.50_100
g2_5<-ggplot(data=COVIDsuicide.50_100, aes(x=Suicide.Rate..Age.Adjusted., y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (50-100)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")

#>100
aaa<-read.csv("2020CHR.csv")

data.suicide <- aaa %>% dplyr::select(FIPS, State, County, Suicide.Rate..Age.Adjusted.)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcountiesgreater100 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >= 100 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updatedgreater100 = coviddeathallcountiesgreater100[keeps.covid]

COVIDsuicide.all.greater100 = merge(data.suicide, covid.data.updatedgreater100, by.x="FIPS", by.y="countyFIPS")

COVIDsuicide.greater100<- distinct(COVIDsuicide.all.greater100,FIPS, .keep_all= TRUE)

cor.test(COVIDsuicide.greater100$Suicide.Rate..Age.Adjusted.,COVIDsuicide.greater100$p_deaths)

    Pearson's product-moment correlation

data:  COVIDsuicide.greater100$Suicide.Rate..Age.Adjusted. and COVIDsuicide.greater100$p_deaths
t = -2.114, df = 227, p-value = 0.03561
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.263839278 -0.009480459
sample estimates:
       cor 
-0.1389508 
#-0.139

g3<-ggplot(data=COVIDsuicide.greater100, aes(x=Suicide.Rate..Age.Adjusted., y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (>100)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")

log10.covid.greater100<-(log10(COVIDsuicide.greater100$p_deaths))
COVIDsuicide.greater100$log10covid= log10.covid.greater100
g3_5<-ggplot(data=COVIDsuicide.greater100, aes(x=Suicide.Rate..Age.Adjusted., y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("Suicide Rate (Age Adjusted) vs COVID Mortality Rate (>100)") +
  xlab("Suicide Rate (Age Adjusted)") +
  ylab("COVID Mortality Rate")

g1

g2

g3

g1_5

g2_5

g3_5

grid.arrange(g1, g2, g3, nrow = 3)

grid.arrange(g1_5,g2_5,g3_5, nrow=3)

cor.test(COVIDsuicide.under50$Suicide.Rate..Age.Adjusted.,COVIDsuicide.under50$log10covid)
cor.test(COVIDsuicide.50_100$Suicide.Rate..Age.Adjusted.,COVIDsuicide.50_100$log10covid)
cor.test(COVIDsuicide.greater100$Suicide.Rate..Age.Adjusted.,COVIDsuicide.greater100$log10covid)

excessive drinking

library(tidyverse)
library(dplyr)
library(ggplot2)

#0-50
aaa<-read.csv("2020CHR.csv")

data.excessdrink <- aaa %>% dplyr::select(FIPS, State, County,X..Excessive.Drinking)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcounties <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths <= 50 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated = coviddeathallcounties[keeps.covid]

COVIDexcessdrink.all = merge(data.excessdrink, covid.data.updated, by.x="FIPS", by.y="countyFIPS")

COVIDexcessdrink<- distinct(COVIDexcessdrink.all,FIPS, .keep_all= TRUE)

cor.test(COVIDexcessdrink$X..Excessive.Drinking,COVIDexcessdrink$p_deaths)

    Pearson's product-moment correlation

data:  COVIDexcessdrink$X..Excessive.Drinking and COVIDexcessdrink$p_deaths
t = -8.3311, df = 3004, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1850335 -0.1151447
sample estimates:
       cor 
-0.1502768 
gg1<-ggplot(data=COVIDexcessdrink, aes(x=X..Excessive.Drinking, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("% Excessive Drinking vs COVID Mortality Rate (<50)") +
  xlab("% Excessive Drinking") +
  ylab("COVID Mortality Rate")

log10.covid.greater100<-(log10(COVIDexcessdrink$p_deaths))
COVIDexcessdrink$log10covid= log10.covid.greater100
gg1_5<-ggplot(data=COVIDexcessdrink, aes(x=X..Excessive.Drinking, y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("% Excessive Drinking vs COVID Mortality Rate (<50)") +
  xlab("% Excessive Drinking") +
  ylab("COVID Mortality Rate")

#50-100
aaa<-read.csv("2020CHR.csv")

data.excessdrink <- aaa %>% dplyr::select(FIPS, State, County, X..Excessive.Drinking)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcounties50_100 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >= 50|covid_TS_counties_long.cases$deaths <= 100 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updated50_100 = coviddeathallcounties50_100[keeps.covid]

COVIDexcessdrink.all.50_100 = merge(data.excessdrink, covid.data.updated50_100, by.x="FIPS", by.y="countyFIPS")

COVIDexcessdrink.50_100<- distinct(COVIDexcessdrink.all.50_100,FIPS, .keep_all= TRUE)

cor.test(COVIDexcessdrink.50_100$X..Excessive.Drinking,COVIDexcessdrink.50_100$p_deaths)

    Pearson's product-moment correlation

data:  COVIDexcessdrink.50_100$X..Excessive.Drinking and COVIDexcessdrink.50_100$p_deaths
t = -5.3865, df = 3004, p-value = 7.738e-08
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.13309280 -0.06227442
sample estimates:
        cor 
-0.09780742 
gg2<-ggplot(data=COVIDexcessdrink.50_100, aes(x=X..Excessive.Drinking, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("% Excessive Drinking vs COVID Mortality Rate (50-100)") +
  xlab("% Excessive Drinking") +
  ylab("COVID Mortality Rate")

log10.covid.50_100<-(log10(COVIDexcessdrink.50_100$p_deaths))
COVIDexcessdrink.50_100$log10covid= log10.covid.50_100
gg2_5<-ggplot(data=COVIDexcessdrink.50_100, aes(x=X..Excessive.Drinking, y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("% Excessive Drinking vs COVID Mortality Rate (50-100)") +
  xlab("% Excessive Drinking") +
  ylab("COVID Mortality Rate")

#>100
aaa<-read.csv("2020CHR.csv")

data.excessdrink <- aaa %>% dplyr::select(FIPS, State, County, X..Excessive.Drinking)

covid_TS_counties_long.cases<- read.csv("covid_TS_counties_long.cases.csv")

coviddeathallcountiesgreater100 <- covid_TS_counties_long.cases[ which(covid_TS_counties_long.cases$deaths >= 100 ),]

keeps.covid <- c("County","countyFIPS","p_deaths")
covid.data.updatedgreater100 = coviddeathallcountiesgreater100[keeps.covid]

COVIDexcessdrink.all.greater100 = merge(data.excessdrink, covid.data.updatedgreater100, by.x="FIPS", by.y="countyFIPS")

COVIDexcessdrink.greater100<- distinct(COVIDexcessdrink.all.greater100,FIPS, .keep_all= TRUE)

cor.test(COVIDexcessdrink.greater100$X..Excessive.Drinking,COVIDexcessdrink.greater100$p_deaths)

    Pearson's product-moment correlation

data:  COVIDexcessdrink.greater100$X..Excessive.Drinking and COVIDexcessdrink.greater100$p_deaths
t = -1.3232, df = 227, p-value = 0.1871
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.21469091  0.04264009
sample estimates:
        cor 
-0.08748468 
gg3<-ggplot(data=COVIDexcessdrink.greater100, aes(x=X..Excessive.Drinking, y=p_deaths)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("% Excessive Drinking vs COVID Mortality Rate (>100)") +
  xlab("% Excessive Drinking") +
  ylab("COVID Mortality Rate")

log10.covid.greater100<-(log10(COVIDexcessdrink.greater100$p_deaths))
COVIDexcessdrink.greater100$log10covid= log10.covid.greater100
gg3_5<-ggplot(data=COVIDexcessdrink.greater100, aes(x=X..Excessive.Drinking, y=log10covid)) + 
  geom_point() + geom_smooth(method="lm",se= TRUE) +
  ggtitle("% Excessive Drinking vs COVID Mortality Rate (>100)") +
  xlab("% Excessive Drinking") +
  ylab("COVID Mortality Rate")

gg1

gg2

gg3

gg1_5

gg2_5

gg3_5

grid.arrange(gg1, gg2, gg3, nrow = 3)

grid.arrange(gg1_5,gg2_5,gg3_5, nrow=3)

cor.test(COVIDexcessdrink$X..Excessive.Drinking,COVIDexcessdrink$log10covid)
cor.test(COVIDexcessdrink.50_100$X..Excessive.Drinking,COVIDexcessdrink.50_100$log10covid)
cor.test(COVIDexcessdrink.greater100$X..Excessive.Drinking,COVIDexcessdrink.greater100$log10covid)
LS0tCnRpdGxlOiAiQ09WSUQgdnMgRGVzcGFpciIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKCmNkYy5kYXRhCgpkZXNwYWlyLmRhdGE8LSBzdWJzZXQoY2RjLmRhdGEsIGRlYXRoX2NhdXNlID09ICJEZXNwYWlyIikKCiNjb3ZpZF9kYXRhX3N0YXRlczwtIHJlYWQuY3N2KCJjb3ZpZF9kYXRhX3N0YXRlcy5jc3YiKQoKY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcwoKa2VlcHMuZGVzcGFpciA8LSBjKCJjb3VudHlfbmFtZSIsImNvdW50eV9maXBzIiwiZGVhdGhfcmF0ZSIpCmRlc3BhaXIuZGF0YS51cGRhdGVkID0gZGVzcGFpci5kYXRhW2tlZXBzLmRlc3BhaXJdCgprZWVwcy5jb3ZpZCA8LSBjKCJDb3VudHkiLCJjb3VudHlGSVBTIiwicF9kZWF0aHMiKQpjb3ZpZC5kYXRhLnVwZGF0ZWQgPSBjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzW2tlZXBzLmNvdmlkXQoKQ09WSURkZXNwYWlyLmFsbCA9IG1lcmdlKGRlc3BhaXIuZGF0YS51cGRhdGVkLCBjb3ZpZC5kYXRhLnVwZGF0ZWQsIGJ5Lng9ImNvdW50eV9maXBzIiwgYnkueT0iY291bnR5RklQUyIpCgpDT1ZJRGRlc3BhaXI8LSBkaXN0aW5jdChDT1ZJRGRlc3BhaXIuYWxsKQoKZ2dwbG90KGRhdGE9Q09WSURkZXNwYWlyLCBhZXMoeD1kZWF0aF9yYXRlLHk9cF9kZWF0aHMpKSArCiAgZ2VvbV9wb2ludCgpCgpjb3IudGVzdChDT1ZJRGRlc3BhaXIkZGVhdGhfcmF0ZSxDT1ZJRGRlc3BhaXIkcF9kZWF0aHMpCgpnZ3Bsb3QoZGF0YT1DT1ZJRGRlc3BhaXIsIGFlcyh4PWRlYXRoX3JhdGUsIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKQoKCmBgYAoKYGBge3J9CmxpYnJhcnkoZ3JpZEV4dHJhKQojPjUwCmNkYy5kYXRhCiNkZXNwYWlyLmRhdGE8LSBzdWJzZXQoY2RjLmRhdGEsIGRlYXRoX2NhdXNlID09ICJEZXNwYWlyIiwgcGVyaW9kID09ICIyMDE1LTIwMTciKQpkZXNwYWlyLmRhdGEgPC0gY2RjLmRhdGFbIHdoaWNoKGNkYy5kYXRhJGRlYXRoX2NhdXNlPT0nRGVzcGFpcicKJiBjZGMuZGF0YSRwZXJpb2Q9PSAnMjAxNS0yMDE3JyksIF0KCmNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMKI2NvdmlkZGVhdGhhbGxjb3VudGllczE8LSBzdWJzZXQoY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcywgZGF0ZSA9PSAiMjAyMC0wMy0xNSIpCiNjb3ZpZGRlYXRoYWxsY291bnRpZXMgPC0gc3Vic2V0KGNvdmlkZGVhdGhhbGxjb3VudGllczEsIGRlYXRocyA+PSA1LCBzZWxlY3Q9YygiQ291bnR5IiwiY291bnR5RklQUyIsImRlYXRocyIsICJwX2RlYXRocyIpKQpjb3ZpZGRlYXRoYWxsY291bnRpZXMgPC0gY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlc1sgd2hpY2goY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPj0gNTAgKSxdCiMmIGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMkZGF0ZT09IjIwMjAtMDMtMTUiKSwgXQojY292aWRkZWF0aGFsbGNvdW50aWVzW2NvdmlkZGVhdGhhbGxjb3VudGllcyRkYXRlID49ICIyMDIwLTA0LTAxIiAmIGNvdmlkZGVhdGhhbGxjb3VudGllcyRkYXRlIDw9ICIyMDIwLTA0LTAzIixdCgprZWVwcy5kZXNwYWlyIDwtIGMoImNvdW50eV9uYW1lIiwiY291bnR5X2ZpcHMiLCJkZWF0aF9yYXRlIikKZGVzcGFpci5kYXRhLnVwZGF0ZWQgPSBkZXNwYWlyLmRhdGFba2VlcHMuZGVzcGFpcl0KCmtlZXBzLmNvdmlkIDwtIGMoIkNvdW50eSIsImNvdW50eUZJUFMiLCJwX2RlYXRocyIpCmNvdmlkLmRhdGEudXBkYXRlZCA9IGNvdmlkZGVhdGhhbGxjb3VudGllc1trZWVwcy5jb3ZpZF0KCkNPVklEZGVzcGFpci5hbGwgPSBtZXJnZShkZXNwYWlyLmRhdGEudXBkYXRlZCwgY292aWQuZGF0YS51cGRhdGVkLCBieS54PSJjb3VudHlfZmlwcyIsIGJ5Lnk9ImNvdW50eUZJUFMiKQoKCiNDT1ZJRGRlc3BhaXI8LSBkaXN0aW5jdChDT1ZJRGRlc3BhaXIuYWxsKQpDT1ZJRGRlc3BhaXI8LSBkaXN0aW5jdChDT1ZJRGRlc3BhaXIuYWxsLGNvdW50eV9maXBzLCAua2VlcF9hbGw9IFRSVUUpCgojQ09WSURkZXNwYWlyIDwtIHVuaXF1ZShDT1ZJRGRlc3BhaXJbICwgMTozIF0gKQoKI2dncGxvdChkYXRhPUNPVklEZGVzcGFpciwgYWVzKHg9ZGVhdGhfcmF0ZSx5PXBfZGVhdGhzKSkgKwojICBnZW9tX3BvaW50KCkKCmNvci50ZXN0KENPVklEZGVzcGFpciRkZWF0aF9yYXRlLENPVklEZGVzcGFpciRwX2RlYXRocykKIy0wLjA1MDk4MzE1IAoKZ2dwbG90KGRhdGE9Q09WSURkZXNwYWlyLCBhZXMoeD1kZWF0aF9yYXRlLCB5PXBfZGVhdGhzKSkgKyAKICBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixzZT0gVFJVRSkgKwogIGdndGl0bGUoIkRlYXRocyBvZiBEZXNwYWlyIFJhdGUgdnMgQ09WSUQgTW9ydGFsaXR5IFJhdGUgKD41MCkiKSArCiAgeGxhYigiRGVhdGggb2YgRGVzcGFpciBSYXRlIikgKwogIHlsYWIoIkNPVklEIE1vcnRhbGl0eSBSYXRlIikKCgoKIzAtNTAKY2RjLmRhdGEKZGVzcGFpci5kYXRhIDwtIGNkYy5kYXRhWyB3aGljaChjZGMuZGF0YSRkZWF0aF9jYXVzZT09J0Rlc3BhaXInCiYgY2RjLmRhdGEkcGVyaW9kPT0gJzIwMTUtMjAxNycpLCBdCgpjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzCmNvdmlkZGVhdGhhbGxjb3VudGllc3VuZGVyNTAgPC0gY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlc1sgd2hpY2goY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPD01MCApLF0KCmtlZXBzLmRlc3BhaXJ1bmRlcjUwIDwtIGMoImNvdW50eV9uYW1lIiwiY291bnR5X2ZpcHMiLCJkZWF0aF9yYXRlIikKZGVzcGFpci5kYXRhLnVwZGF0ZWQudW5kZXI1MCA9IGRlc3BhaXIuZGF0YVtrZWVwcy5kZXNwYWlydW5kZXI1MF0KCmtlZXBzLmNvdmlkIDwtIGMoIkNvdW50eSIsImNvdW50eUZJUFMiLCJwX2RlYXRocyIpCmNvdmlkLmRhdGEudXBkYXRlZCA9IGNvdmlkZGVhdGhhbGxjb3VudGllc3VuZGVyNTBba2VlcHMuY292aWRdCgpDT1ZJRGRlc3BhaXIuYWxsLnVuZGVyNTAgPSBtZXJnZShkZXNwYWlyLmRhdGEudXBkYXRlZC51bmRlcjUwLCBjb3ZpZC5kYXRhLnVwZGF0ZWQsIGJ5Lng9ImNvdW50eV9maXBzIiwgYnkueT0iY291bnR5RklQUyIpCgpDT1ZJRGRlc3BhaXJ1bmRlcjUwPC0gZGlzdGluY3QoQ09WSURkZXNwYWlyLmFsbC51bmRlcjUwLGNvdW50eV9maXBzLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRGRlc3BhaXJ1bmRlcjUwJGRlYXRoX3JhdGUsQ09WSURkZXNwYWlydW5kZXI1MCRwX2RlYXRocykKIy0wLjA3NzIxNDg5IApwMTwtZ2dwbG90KGRhdGE9Q09WSURkZXNwYWlydW5kZXI1MCwgYWVzKHg9ZGVhdGhfcmF0ZSwgeT1wX2RlYXRocykpICsgCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsc2U9IFRSVUUpICsKICBnZ3RpdGxlKCJEZWF0aHMgb2YgRGVzcGFpciBSYXRlIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICgwLTUwKSIpICsKICB4bGFiKCJEZWF0aCBvZiBEZXNwYWlyIFJhdGUiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKbG9nMTAuY292aWQuMF81MDwtKGxvZzEwKENPVklEZGVzcGFpcnVuZGVyNTAkcF9kZWF0aHMpKQpsb2cxMC5kZXNwYWlyLjBfNTA8LSAobG9nMTAoQ09WSURkZXNwYWlydW5kZXI1MCRkZWF0aF9yYXRlKSkKQ09WSURkZXNwYWlydW5kZXI1MCRsb2cxMGNvdmlkPSBsb2cxMC5jb3ZpZC4wXzUwCkNPVklEZGVzcGFpcnVuZGVyNTAkbG9nMTBkZXNwYWlyPWxvZzEwLmRlc3BhaXIuMF81MApwMV81PC1nZ3Bsb3QoZGF0YT1DT1ZJRGRlc3BhaXJ1bmRlcjUwLCBhZXMoeD1sb2cxMGRlc3BhaXIsIHk9bG9nMTBjb3ZpZCkpICsgCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsc2U9IFRSVUUpICsKICBnZ3RpdGxlKCJEZWF0aHMgb2YgRGVzcGFpciBSYXRlIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICgwLTUwKSIpICsKICB4bGFiKCJEZWF0aCBvZiBEZXNwYWlyIFJhdGUiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKIzUwLTEwMApjZGMuZGF0YQpkZXNwYWlyLmRhdGEgPC0gY2RjLmRhdGFbIHdoaWNoKGNkYy5kYXRhJGRlYXRoX2NhdXNlPT0nRGVzcGFpcicKJiBjZGMuZGF0YSRwZXJpb2Q9PSAnMjAxNS0yMDE3JyksIF0KCmNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMKY292aWRkZWF0aGFsbGNvdW50aWVzNTAxMDAgPC0gY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlc1sgd2hpY2goY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPj01MHxjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzJGRlYXRocyA8PTEwMCApLF0KCmtlZXBzLmRlc3BhaXI1MDEwMCA8LSBjKCJjb3VudHlfbmFtZSIsImNvdW50eV9maXBzIiwiZGVhdGhfcmF0ZSIpCmRlc3BhaXIuZGF0YS51cGRhdGVkLjUwMTAwID0gZGVzcGFpci5kYXRhW2tlZXBzLmRlc3BhaXI1MDEwMF0KCmtlZXBzLmNvdmlkIDwtIGMoIkNvdW50eSIsImNvdW50eUZJUFMiLCJwX2RlYXRocyIpCmNvdmlkLmRhdGEudXBkYXRlZDUwMTAwID0gY292aWRkZWF0aGFsbGNvdW50aWVzNTAxMDBba2VlcHMuY292aWRdCgpDT1ZJRGRlc3BhaXIuYWxsLjUwMTAwID0gbWVyZ2UoZGVzcGFpci5kYXRhLnVwZGF0ZWQuNTAxMDAsIGNvdmlkLmRhdGEudXBkYXRlZDUwMTAwLCBieS54PSJjb3VudHlfZmlwcyIsIGJ5Lnk9ImNvdW50eUZJUFMiKQoKQ09WSURkZXNwYWlyNTAxMDA8LSBkaXN0aW5jdChDT1ZJRGRlc3BhaXIuYWxsLjUwMTAwLGNvdW50eV9maXBzLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRGRlc3BhaXI1MDEwMCRkZWF0aF9yYXRlLENPVklEZGVzcGFpcjUwMTAwJHBfZGVhdGhzKQojLTAuMDI1OTMwODggCnAyPC1nZ3Bsb3QoZGF0YT1DT1ZJRGRlc3BhaXI1MDEwMCwgYWVzKHg9ZGVhdGhfcmF0ZSwgeT1wX2RlYXRocykpICsgCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsc2U9IFRSVUUpICsKICBnZ3RpdGxlKCJEZWF0aHMgb2YgRGVzcGFpciBSYXRlIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICg1MC0xMDApIikgKwogIHhsYWIoIkRlYXRoIG9mIERlc3BhaXIgUmF0ZSIpICsKICB5bGFiKCJDT1ZJRCBNb3J0YWxpdHkgUmF0ZSIpCgpsb2cxMC5jb3ZpZC41MF8xMDA8LShsb2cxMChDT1ZJRGRlc3BhaXI1MDEwMCRwX2RlYXRocykpCmxvZzEwLmRlc3BhaXIuNTBfMTAwPC0gKGxvZzEwKENPVklEZGVzcGFpcjUwMTAwJGRlYXRoX3JhdGUpKQpDT1ZJRGRlc3BhaXI1MDEwMCRsb2cxMGNvdmlkPSBsb2cxMC5jb3ZpZC41MF8xMDAKQ09WSURkZXNwYWlyNTAxMDAkbG9nMTBkZXNwYWlyPWxvZzEwLmRlc3BhaXIuNTBfMTAwCnAyXzU8LWdncGxvdChkYXRhPUNPVklEZGVzcGFpcjUwMTAwLCBhZXMoeD1sb2cxMGRlc3BhaXIsIHk9bG9nMTBjb3ZpZCkpICsgCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsc2U9IFRSVUUpICsKICBnZ3RpdGxlKCJEZWF0aHMgb2YgRGVzcGFpciBSYXRlIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICg1MC0xMDApIikgKwogIHhsYWIoIkRlYXRoIG9mIERlc3BhaXIgUmF0ZSIpICsKICB5bGFiKCJDT1ZJRCBNb3J0YWxpdHkgUmF0ZSIpCgojPjEwMApjZGMuZGF0YQpkZXNwYWlyLmRhdGEgPC0gY2RjLmRhdGFbIHdoaWNoKGNkYy5kYXRhJGRlYXRoX2NhdXNlPT0nRGVzcGFpcicKJiBjZGMuZGF0YSRwZXJpb2Q9PSAnMjAxNS0yMDE3JyksIF0KCmNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMKY292aWRkZWF0aGFsbGNvdW50aWVzZ3JlYXRlcjEwMCA8LSBjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzWyB3aGljaChjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzJGRlYXRocyA+PTEwMCApLF0KCmtlZXBzLmRlc3BhaXJncmVhdGVyMTAwIDwtIGMoImNvdW50eV9uYW1lIiwiY291bnR5X2ZpcHMiLCJkZWF0aF9yYXRlIikKZGVzcGFpci5kYXRhLnVwZGF0ZWQuZ3JlYXRlcjEwMCA9IGRlc3BhaXIuZGF0YVtrZWVwcy5kZXNwYWlyZ3JlYXRlcjEwMF0KCmtlZXBzLmNvdmlkIDwtIGMoIkNvdW50eSIsImNvdW50eUZJUFMiLCJwX2RlYXRocyIpCmNvdmlkLmRhdGEudXBkYXRlZGdyZWF0ZXIxMDAgPSBjb3ZpZGRlYXRoYWxsY291bnRpZXNncmVhdGVyMTAwW2tlZXBzLmNvdmlkXQoKQ09WSURkZXNwYWlyLmFsbC5ncmVhdGVyMTAwID0gbWVyZ2UoZGVzcGFpci5kYXRhLnVwZGF0ZWQuZ3JlYXRlcjEwMCwgY292aWQuZGF0YS51cGRhdGVkZ3JlYXRlcjEwMCwgYnkueD0iY291bnR5X2ZpcHMiLCBieS55PSJjb3VudHlGSVBTIikKCkNPVklEZGVzcGFpcmdyZWF0ZXIxMDA8LSBkaXN0aW5jdChDT1ZJRGRlc3BhaXIuYWxsLmdyZWF0ZXIxMDAsY291bnR5X2ZpcHMsIC5rZWVwX2FsbD0gVFJVRSkKCmNvci50ZXN0KENPVklEZGVzcGFpcmdyZWF0ZXIxMDAkZGVhdGhfcmF0ZSxDT1ZJRGRlc3BhaXJncmVhdGVyMTAwJHBfZGVhdGhzKQoKIy0wLjA3MTQyMTg0CnAzPC1nZ3Bsb3QoZGF0YT1DT1ZJRGRlc3BhaXJncmVhdGVyMTAwLCBhZXMoeD1kZWF0aF9yYXRlLCB5PXBfZGVhdGhzKSkgKyAKICBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixzZT0gVFJVRSkgKwogIGdndGl0bGUoIkRlYXRocyBvZiBEZXNwYWlyIFJhdGUgdnMgQ09WSUQgTW9ydGFsaXR5IFJhdGUgKD4xMDApIikgKwogIHhsYWIoIkRlYXRoIG9mIERlc3BhaXIgUmF0ZSIpICsKICB5bGFiKCJDT1ZJRCBNb3J0YWxpdHkgUmF0ZSIpCgpsb2cxMC5jb3ZpZC5ncmVhdGVyMTAwPC0obG9nMTAoQ09WSURkZXNwYWlyZ3JlYXRlcjEwMCRwX2RlYXRocykpCmxvZzEwLmRlc3BhaXIuZ3JlYXRlcjEwMDwtIChsb2cxMChDT1ZJRGRlc3BhaXJncmVhdGVyMTAwJGRlYXRoX3JhdGUpKQpDT1ZJRGRlc3BhaXJncmVhdGVyMTAwJGxvZzEwY292aWQ9IGxvZzEwLmNvdmlkLmdyZWF0ZXIxMDAKQ09WSURkZXNwYWlyZ3JlYXRlcjEwMCRsb2cxMGRlc3BhaXI9bG9nMTAuZGVzcGFpci5ncmVhdGVyMTAwCnAzXzU8LWdncGxvdChkYXRhPUNPVklEZGVzcGFpcmdyZWF0ZXIxMDAsIGFlcyh4PWxvZzEwZGVzcGFpciwgeT1sb2cxMGNvdmlkKSkgKyAKICBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixzZT0gVFJVRSkgKwogIGdndGl0bGUoIkRlYXRocyBvZiBEZXNwYWlyIFJhdGUgdnMgQ09WSUQgTW9ydGFsaXR5IFJhdGUgKD4xMDApIikgKwogIHhsYWIoIkRlYXRoIG9mIERlc3BhaXIgUmF0ZSIpICsKICB5bGFiKCJDT1ZJRCBNb3J0YWxpdHkgUmF0ZSIpCgpncmlkLmFycmFuZ2UocDEsIHAyLCBwMywgbnJvdyA9IDMpCmdyaWQuYXJyYW5nZShwMV81LHAyXzUscDNfNSwgbnJvdyA9MykKcDEKcDIKcDMKcDFfNQpwMl81CnAzXzUKYGBgCmBgYHtyfQpjb3IudGVzdChDT1ZJRGRlc3BhaXJ1bmRlcjUwJGxvZzEwY292aWQsQ09WSURkZXNwYWlydW5kZXI1MCRsb2cxMGRlc3BhaXIpCmNvci50ZXN0KENPVklEZGVzcGFpcjUwMTAwJGxvZzEwY292aWQsQ09WSURkZXNwYWlyNTAxMDAkbG9nMTBkZXNwYWlyKQpjb3IudGVzdChDT1ZJRGRlc3BhaXJncmVhdGVyMTAwJGxvZzEwY292aWQsQ09WSURkZXNwYWlyZ3JlYXRlcjEwMCRsb2cxMGRlc3BhaXIpCgpgYGAKCgpzdWljaWRlCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQoKYWFhPC1yZWFkLmNzdigiMjAyMENIUi5jc3YiKQoKZGF0YS5zdWljaWRlIDwtIGFhYSAlPiUgZHBseXI6OnNlbGVjdChGSVBTLCBTdGF0ZSwgQ291bnR5LCBTdWljaWRlLlJhdGUuLkFnZS5BZGp1c3RlZC4pCgpjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzPC0gcmVhZC5jc3YoImNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMuY3N2IikKCmNvdmlkZGVhdGhhbGxjb3VudGllcyA8LSBjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzWyB3aGljaChjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzJGRlYXRocyA+PSA1MCApLF0KCmtlZXBzLmNvdmlkIDwtIGMoIkNvdW50eSIsImNvdW50eUZJUFMiLCJwX2RlYXRocyIpCmNvdmlkLmRhdGEudXBkYXRlZCA9IGNvdmlkZGVhdGhhbGxjb3VudGllc1trZWVwcy5jb3ZpZF0KCkNPVklEc3VpY2lkZS5hbGwgPSBtZXJnZShkYXRhLnN1aWNpZGUsIGNvdmlkLmRhdGEudXBkYXRlZCwgYnkueD0iRklQUyIsIGJ5Lnk9ImNvdW50eUZJUFMiKQoKQ09WSURzdWljaWRlPC0gZGlzdGluY3QoQ09WSURzdWljaWRlLmFsbCxGSVBTLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRHN1aWNpZGUkU3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLENPVklEc3VpY2lkZSRwX2RlYXRocykKIy0wLjEzOQoKZ2dwbG90KGRhdGE9Q09WSURzdWljaWRlLCBhZXMoeD1TdWljaWRlLlJhdGUuLkFnZS5BZGp1c3RlZC4sIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiU3VpY2lkZSBSYXRlIChBZ2UgQWRqdXN0ZWQpIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICg+NTApIikgKwogIHhsYWIoIlN1aWNpZGUgUmF0ZSAoQWdlIEFkanVzdGVkKSIpICsKICB5bGFiKCJDT1ZJRCBNb3J0YWxpdHkgUmF0ZSIpCgoKIzUwCmFhYTwtcmVhZC5jc3YoIjIwMjBDSFIuY3N2IikKCmRhdGEuc3VpY2lkZSA8LSBhYWEgJT4lIGRwbHlyOjpzZWxlY3QoRklQUywgU3RhdGUsIENvdW50eSwgU3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuKQoKY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlczwtIHJlYWQuY3N2KCJjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzLmNzdiIpCgpjb3ZpZGRlYXRoYWxsY291bnRpZXN1bmRlcjUwIDwtIGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXNbIHdoaWNoKGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMkZGVhdGhzIDw9IDUwICksXQoKa2VlcHMuY292aWQgPC0gYygiQ291bnR5IiwiY291bnR5RklQUyIsInBfZGVhdGhzIikKY292aWQuZGF0YS51cGRhdGVkdW5kZXI1MCA9IGNvdmlkZGVhdGhhbGxjb3VudGllc3VuZGVyNTBba2VlcHMuY292aWRdCgpDT1ZJRHN1aWNpZGUuYWxsLnVuZGVyNTAgPSBtZXJnZShkYXRhLnN1aWNpZGUsIGNvdmlkLmRhdGEudXBkYXRlZHVuZGVyNTAsIGJ5Lng9IkZJUFMiLCBieS55PSJjb3VudHlGSVBTIikKCkNPVklEc3VpY2lkZS51bmRlcjUwPC0gZGlzdGluY3QoQ09WSURzdWljaWRlLmFsbC51bmRlcjUwLEZJUFMsIC5rZWVwX2FsbD0gVFJVRSkKCmNvci50ZXN0KENPVklEc3VpY2lkZS51bmRlcjUwJFN1aWNpZGUuUmF0ZS4uQWdlLkFkanVzdGVkLixDT1ZJRHN1aWNpZGUudW5kZXI1MCRwX2RlYXRocykKIy0wLjEzOQoKZzE8LWdncGxvdChkYXRhPUNPVklEc3VpY2lkZS51bmRlcjUwLCBhZXMoeD1TdWljaWRlLlJhdGUuLkFnZS5BZGp1c3RlZC4sIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiU3VpY2lkZSBSYXRlIChBZ2UgQWRqdXN0ZWQpIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICgwLTUwKSIpICsKICB4bGFiKCJTdWljaWRlIFJhdGUgKEFnZSBBZGp1c3RlZCkiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKbG9nMTAuY292aWQudW5kZXI1MDwtKGxvZzEwKENPVklEc3VpY2lkZS51bmRlcjUwJHBfZGVhdGhzKSkKQ09WSURzdWljaWRlLnVuZGVyNTAkbG9nMTBjb3ZpZD0gbG9nMTAuY292aWQudW5kZXI1MApnMV81PC1nZ3Bsb3QoZGF0YT1DT1ZJRHN1aWNpZGUudW5kZXI1MCwgYWVzKHg9U3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLCB5PWxvZzEwY292aWQpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiU3VpY2lkZSBSYXRlIChBZ2UgQWRqdXN0ZWQpIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICgwLTUwKSIpICsKICB4bGFiKCJTdWljaWRlIFJhdGUgKEFnZSBBZGp1c3RlZCkiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKIzUwLTEwMAphYWE8LXJlYWQuY3N2KCIyMDIwQ0hSLmNzdiIpCgpkYXRhLnN1aWNpZGUgPC0gYWFhICU+JSBkcGx5cjo6c2VsZWN0KEZJUFMsIFN0YXRlLCBDb3VudHksIFN1aWNpZGUuUmF0ZS4uQWdlLkFkanVzdGVkLikKCmNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXM8LSByZWFkLmNzdigiY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcy5jc3YiKQoKY292aWRkZWF0aGFsbGNvdW50aWVzNTBfMTAwIDwtIGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXNbIHdoaWNoKGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMkZGVhdGhzID49IDUwfGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMkZGVhdGhzIDw9IDEwMCApLF0KCmtlZXBzLmNvdmlkIDwtIGMoIkNvdW50eSIsImNvdW50eUZJUFMiLCJwX2RlYXRocyIpCmNvdmlkLmRhdGEudXBkYXRlZDUwXzEwMCA9IGNvdmlkZGVhdGhhbGxjb3VudGllczUwXzEwMFtrZWVwcy5jb3ZpZF0KCkNPVklEc3VpY2lkZS5hbGwuNTBfMTAwID0gbWVyZ2UoZGF0YS5zdWljaWRlLCBjb3ZpZC5kYXRhLnVwZGF0ZWQ1MF8xMDAsIGJ5Lng9IkZJUFMiLCBieS55PSJjb3VudHlGSVBTIikKCkNPVklEc3VpY2lkZS41MF8xMDA8LSBkaXN0aW5jdChDT1ZJRHN1aWNpZGUuYWxsLjUwXzEwMCxGSVBTLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRHN1aWNpZGUuNTBfMTAwJFN1aWNpZGUuUmF0ZS4uQWdlLkFkanVzdGVkLixDT1ZJRHN1aWNpZGUuNTBfMTAwJHBfZGVhdGhzKQojLTAuMTM5CgpnMjwtZ2dwbG90KGRhdGE9Q09WSURzdWljaWRlLjUwXzEwMCwgYWVzKHg9U3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLCB5PXBfZGVhdGhzKSkgKyAKICBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixzZT0gVFJVRSkgKwogIGdndGl0bGUoIlN1aWNpZGUgUmF0ZSAoQWdlIEFkanVzdGVkKSB2cyBDT1ZJRCBNb3J0YWxpdHkgUmF0ZSAoNTAtMTAwKSIpICsKICB4bGFiKCJTdWljaWRlIFJhdGUgKEFnZSBBZGp1c3RlZCkiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKbG9nMTAuY292aWQuNTBfMTAwPC0obG9nMTAoQ09WSURzdWljaWRlLjUwXzEwMCRwX2RlYXRocykpCkNPVklEc3VpY2lkZS41MF8xMDAkbG9nMTBjb3ZpZD0gbG9nMTAuY292aWQuNTBfMTAwCmcyXzU8LWdncGxvdChkYXRhPUNPVklEc3VpY2lkZS41MF8xMDAsIGFlcyh4PVN1aWNpZGUuUmF0ZS4uQWdlLkFkanVzdGVkLiwgeT1sb2cxMGNvdmlkKSkgKyAKICBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixzZT0gVFJVRSkgKwogIGdndGl0bGUoIlN1aWNpZGUgUmF0ZSAoQWdlIEFkanVzdGVkKSB2cyBDT1ZJRCBNb3J0YWxpdHkgUmF0ZSAoNTAtMTAwKSIpICsKICB4bGFiKCJTdWljaWRlIFJhdGUgKEFnZSBBZGp1c3RlZCkiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKIz4xMDAKYWFhPC1yZWFkLmNzdigiMjAyMENIUi5jc3YiKQoKZGF0YS5zdWljaWRlIDwtIGFhYSAlPiUgZHBseXI6OnNlbGVjdChGSVBTLCBTdGF0ZSwgQ291bnR5LCBTdWljaWRlLlJhdGUuLkFnZS5BZGp1c3RlZC4pCgpjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzPC0gcmVhZC5jc3YoImNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMuY3N2IikKCmNvdmlkZGVhdGhhbGxjb3VudGllc2dyZWF0ZXIxMDAgPC0gY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlc1sgd2hpY2goY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPj0gMTAwICksXQoKa2VlcHMuY292aWQgPC0gYygiQ291bnR5IiwiY291bnR5RklQUyIsInBfZGVhdGhzIikKY292aWQuZGF0YS51cGRhdGVkZ3JlYXRlcjEwMCA9IGNvdmlkZGVhdGhhbGxjb3VudGllc2dyZWF0ZXIxMDBba2VlcHMuY292aWRdCgpDT1ZJRHN1aWNpZGUuYWxsLmdyZWF0ZXIxMDAgPSBtZXJnZShkYXRhLnN1aWNpZGUsIGNvdmlkLmRhdGEudXBkYXRlZGdyZWF0ZXIxMDAsIGJ5Lng9IkZJUFMiLCBieS55PSJjb3VudHlGSVBTIikKCkNPVklEc3VpY2lkZS5ncmVhdGVyMTAwPC0gZGlzdGluY3QoQ09WSURzdWljaWRlLmFsbC5ncmVhdGVyMTAwLEZJUFMsIC5rZWVwX2FsbD0gVFJVRSkKCmNvci50ZXN0KENPVklEc3VpY2lkZS5ncmVhdGVyMTAwJFN1aWNpZGUuUmF0ZS4uQWdlLkFkanVzdGVkLixDT1ZJRHN1aWNpZGUuZ3JlYXRlcjEwMCRwX2RlYXRocykKIy0wLjEzOQoKZzM8LWdncGxvdChkYXRhPUNPVklEc3VpY2lkZS5ncmVhdGVyMTAwLCBhZXMoeD1TdWljaWRlLlJhdGUuLkFnZS5BZGp1c3RlZC4sIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiU3VpY2lkZSBSYXRlIChBZ2UgQWRqdXN0ZWQpIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICg+MTAwKSIpICsKICB4bGFiKCJTdWljaWRlIFJhdGUgKEFnZSBBZGp1c3RlZCkiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKbG9nMTAuY292aWQuZ3JlYXRlcjEwMDwtKGxvZzEwKENPVklEc3VpY2lkZS5ncmVhdGVyMTAwJHBfZGVhdGhzKSkKQ09WSURzdWljaWRlLmdyZWF0ZXIxMDAkbG9nMTBjb3ZpZD0gbG9nMTAuY292aWQuZ3JlYXRlcjEwMApnM181PC1nZ3Bsb3QoZGF0YT1DT1ZJRHN1aWNpZGUuZ3JlYXRlcjEwMCwgYWVzKHg9U3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLCB5PWxvZzEwY292aWQpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiU3VpY2lkZSBSYXRlIChBZ2UgQWRqdXN0ZWQpIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICg+MTAwKSIpICsKICB4bGFiKCJTdWljaWRlIFJhdGUgKEFnZSBBZGp1c3RlZCkiKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKZzEKZzIKZzMKZzFfNQpnMl81CmczXzUKZ3JpZC5hcnJhbmdlKGcxLCBnMiwgZzMsIG5yb3cgPSAzKQpncmlkLmFycmFuZ2UoZzFfNSxnMl81LGczXzUsIG5yb3c9MykKCmBgYApgYGB7cn0KY29yLnRlc3QoQ09WSURzdWljaWRlLnVuZGVyNTAkU3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLENPVklEc3VpY2lkZS51bmRlcjUwJGxvZzEwY292aWQpCmNvci50ZXN0KENPVklEc3VpY2lkZS41MF8xMDAkU3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLENPVklEc3VpY2lkZS41MF8xMDAkbG9nMTBjb3ZpZCkKY29yLnRlc3QoQ09WSURzdWljaWRlLmdyZWF0ZXIxMDAkU3VpY2lkZS5SYXRlLi5BZ2UuQWRqdXN0ZWQuLENPVklEc3VpY2lkZS5ncmVhdGVyMTAwJGxvZzEwY292aWQpCmBgYAoKCgpleGNlc3NpdmUgZHJpbmtpbmcKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCgojMC01MAphYWE8LXJlYWQuY3N2KCIyMDIwQ0hSLmNzdiIpCgpkYXRhLmV4Y2Vzc2RyaW5rIDwtIGFhYSAlPiUgZHBseXI6OnNlbGVjdChGSVBTLCBTdGF0ZSwgQ291bnR5LFguLkV4Y2Vzc2l2ZS5Ecmlua2luZykKCmNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXM8LSByZWFkLmNzdigiY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcy5jc3YiKQoKY292aWRkZWF0aGFsbGNvdW50aWVzIDwtIGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXNbIHdoaWNoKGNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMkZGVhdGhzIDw9IDUwICksXQoKa2VlcHMuY292aWQgPC0gYygiQ291bnR5IiwiY291bnR5RklQUyIsInBfZGVhdGhzIikKY292aWQuZGF0YS51cGRhdGVkID0gY292aWRkZWF0aGFsbGNvdW50aWVzW2tlZXBzLmNvdmlkXQoKQ09WSURleGNlc3Nkcmluay5hbGwgPSBtZXJnZShkYXRhLmV4Y2Vzc2RyaW5rLCBjb3ZpZC5kYXRhLnVwZGF0ZWQsIGJ5Lng9IkZJUFMiLCBieS55PSJjb3VudHlGSVBTIikKCkNPVklEZXhjZXNzZHJpbms8LSBkaXN0aW5jdChDT1ZJRGV4Y2Vzc2RyaW5rLmFsbCxGSVBTLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRGV4Y2Vzc2RyaW5rJFguLkV4Y2Vzc2l2ZS5Ecmlua2luZyxDT1ZJRGV4Y2Vzc2RyaW5rJHBfZGVhdGhzKQoKZ2cxPC1nZ3Bsb3QoZGF0YT1DT1ZJRGV4Y2Vzc2RyaW5rLCBhZXMoeD1YLi5FeGNlc3NpdmUuRHJpbmtpbmcsIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiJSBFeGNlc3NpdmUgRHJpbmtpbmcgdnMgQ09WSUQgTW9ydGFsaXR5IFJhdGUgKDw1MCkiKSArCiAgeGxhYigiJSBFeGNlc3NpdmUgRHJpbmtpbmciKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKbG9nMTAuY292aWQuZ3JlYXRlcjEwMDwtKGxvZzEwKENPVklEZXhjZXNzZHJpbmskcF9kZWF0aHMpKQpDT1ZJRGV4Y2Vzc2RyaW5rJGxvZzEwY292aWQ9IGxvZzEwLmNvdmlkLmdyZWF0ZXIxMDAKZ2cxXzU8LWdncGxvdChkYXRhPUNPVklEZXhjZXNzZHJpbmssIGFlcyh4PVguLkV4Y2Vzc2l2ZS5Ecmlua2luZywgeT1sb2cxMGNvdmlkKSkgKyAKICBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixzZT0gVFJVRSkgKwogIGdndGl0bGUoIiUgRXhjZXNzaXZlIERyaW5raW5nIHZzIENPVklEIE1vcnRhbGl0eSBSYXRlICg8NTApIikgKwogIHhsYWIoIiUgRXhjZXNzaXZlIERyaW5raW5nIikgKwogIHlsYWIoIkNPVklEIE1vcnRhbGl0eSBSYXRlIikKCiM1MC0xMDAKYWFhPC1yZWFkLmNzdigiMjAyMENIUi5jc3YiKQoKZGF0YS5leGNlc3NkcmluayA8LSBhYWEgJT4lIGRwbHlyOjpzZWxlY3QoRklQUywgU3RhdGUsIENvdW50eSwgWC4uRXhjZXNzaXZlLkRyaW5raW5nKQoKY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlczwtIHJlYWQuY3N2KCJjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzLmNzdiIpCgpjb3ZpZGRlYXRoYWxsY291bnRpZXM1MF8xMDAgPC0gY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlc1sgd2hpY2goY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPj0gNTB8Y292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPD0gMTAwICksXQoKa2VlcHMuY292aWQgPC0gYygiQ291bnR5IiwiY291bnR5RklQUyIsInBfZGVhdGhzIikKY292aWQuZGF0YS51cGRhdGVkNTBfMTAwID0gY292aWRkZWF0aGFsbGNvdW50aWVzNTBfMTAwW2tlZXBzLmNvdmlkXQoKQ09WSURleGNlc3Nkcmluay5hbGwuNTBfMTAwID0gbWVyZ2UoZGF0YS5leGNlc3NkcmluaywgY292aWQuZGF0YS51cGRhdGVkNTBfMTAwLCBieS54PSJGSVBTIiwgYnkueT0iY291bnR5RklQUyIpCgpDT1ZJRGV4Y2Vzc2RyaW5rLjUwXzEwMDwtIGRpc3RpbmN0KENPVklEZXhjZXNzZHJpbmsuYWxsLjUwXzEwMCxGSVBTLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRGV4Y2Vzc2RyaW5rLjUwXzEwMCRYLi5FeGNlc3NpdmUuRHJpbmtpbmcsQ09WSURleGNlc3Nkcmluay41MF8xMDAkcF9kZWF0aHMpCgpnZzI8LWdncGxvdChkYXRhPUNPVklEZXhjZXNzZHJpbmsuNTBfMTAwLCBhZXMoeD1YLi5FeGNlc3NpdmUuRHJpbmtpbmcsIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiJSBFeGNlc3NpdmUgRHJpbmtpbmcgdnMgQ09WSUQgTW9ydGFsaXR5IFJhdGUgKDUwLTEwMCkiKSArCiAgeGxhYigiJSBFeGNlc3NpdmUgRHJpbmtpbmciKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKbG9nMTAuY292aWQuNTBfMTAwPC0obG9nMTAoQ09WSURleGNlc3Nkcmluay41MF8xMDAkcF9kZWF0aHMpKQpDT1ZJRGV4Y2Vzc2RyaW5rLjUwXzEwMCRsb2cxMGNvdmlkPSBsb2cxMC5jb3ZpZC41MF8xMDAKZ2cyXzU8LWdncGxvdChkYXRhPUNPVklEZXhjZXNzZHJpbmsuNTBfMTAwLCBhZXMoeD1YLi5FeGNlc3NpdmUuRHJpbmtpbmcsIHk9bG9nMTBjb3ZpZCkpICsgCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsc2U9IFRSVUUpICsKICBnZ3RpdGxlKCIlIEV4Y2Vzc2l2ZSBEcmlua2luZyB2cyBDT1ZJRCBNb3J0YWxpdHkgUmF0ZSAoNTAtMTAwKSIpICsKICB4bGFiKCIlIEV4Y2Vzc2l2ZSBEcmlua2luZyIpICsKICB5bGFiKCJDT1ZJRCBNb3J0YWxpdHkgUmF0ZSIpCgojPjEwMAphYWE8LXJlYWQuY3N2KCIyMDIwQ0hSLmNzdiIpCgpkYXRhLmV4Y2Vzc2RyaW5rIDwtIGFhYSAlPiUgZHBseXI6OnNlbGVjdChGSVBTLCBTdGF0ZSwgQ291bnR5LCBYLi5FeGNlc3NpdmUuRHJpbmtpbmcpCgpjb3ZpZF9UU19jb3VudGllc19sb25nLmNhc2VzPC0gcmVhZC5jc3YoImNvdmlkX1RTX2NvdW50aWVzX2xvbmcuY2FzZXMuY3N2IikKCmNvdmlkZGVhdGhhbGxjb3VudGllc2dyZWF0ZXIxMDAgPC0gY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlc1sgd2hpY2goY292aWRfVFNfY291bnRpZXNfbG9uZy5jYXNlcyRkZWF0aHMgPj0gMTAwICksXQoKa2VlcHMuY292aWQgPC0gYygiQ291bnR5IiwiY291bnR5RklQUyIsInBfZGVhdGhzIikKY292aWQuZGF0YS51cGRhdGVkZ3JlYXRlcjEwMCA9IGNvdmlkZGVhdGhhbGxjb3VudGllc2dyZWF0ZXIxMDBba2VlcHMuY292aWRdCgpDT1ZJRGV4Y2Vzc2RyaW5rLmFsbC5ncmVhdGVyMTAwID0gbWVyZ2UoZGF0YS5leGNlc3NkcmluaywgY292aWQuZGF0YS51cGRhdGVkZ3JlYXRlcjEwMCwgYnkueD0iRklQUyIsIGJ5Lnk9ImNvdW50eUZJUFMiKQoKQ09WSURleGNlc3Nkcmluay5ncmVhdGVyMTAwPC0gZGlzdGluY3QoQ09WSURleGNlc3Nkcmluay5hbGwuZ3JlYXRlcjEwMCxGSVBTLCAua2VlcF9hbGw9IFRSVUUpCgpjb3IudGVzdChDT1ZJRGV4Y2Vzc2RyaW5rLmdyZWF0ZXIxMDAkWC4uRXhjZXNzaXZlLkRyaW5raW5nLENPVklEZXhjZXNzZHJpbmsuZ3JlYXRlcjEwMCRwX2RlYXRocykKCmdnMzwtZ2dwbG90KGRhdGE9Q09WSURleGNlc3Nkcmluay5ncmVhdGVyMTAwLCBhZXMoeD1YLi5FeGNlc3NpdmUuRHJpbmtpbmcsIHk9cF9kZWF0aHMpKSArIAogIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLHNlPSBUUlVFKSArCiAgZ2d0aXRsZSgiJSBFeGNlc3NpdmUgRHJpbmtpbmcgdnMgQ09WSUQgTW9ydGFsaXR5IFJhdGUgKD4xMDApIikgKwogIHhsYWIoIiUgRXhjZXNzaXZlIERyaW5raW5nIikgKwogIHlsYWIoIkNPVklEIE1vcnRhbGl0eSBSYXRlIikKCmxvZzEwLmNvdmlkLmdyZWF0ZXIxMDA8LShsb2cxMChDT1ZJRGV4Y2Vzc2RyaW5rLmdyZWF0ZXIxMDAkcF9kZWF0aHMpKQpDT1ZJRGV4Y2Vzc2RyaW5rLmdyZWF0ZXIxMDAkbG9nMTBjb3ZpZD0gbG9nMTAuY292aWQuZ3JlYXRlcjEwMApnZzNfNTwtZ2dwbG90KGRhdGE9Q09WSURleGNlc3Nkcmluay5ncmVhdGVyMTAwLCBhZXMoeD1YLi5FeGNlc3NpdmUuRHJpbmtpbmcsIHk9bG9nMTBjb3ZpZCkpICsgCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsc2U9IFRSVUUpICsKICBnZ3RpdGxlKCIlIEV4Y2Vzc2l2ZSBEcmlua2luZyB2cyBDT1ZJRCBNb3J0YWxpdHkgUmF0ZSAoPjEwMCkiKSArCiAgeGxhYigiJSBFeGNlc3NpdmUgRHJpbmtpbmciKSArCiAgeWxhYigiQ09WSUQgTW9ydGFsaXR5IFJhdGUiKQoKZ2cxCmdnMgpnZzMKZ2cxXzUKZ2cyXzUKZ2czXzUKZ3JpZC5hcnJhbmdlKGdnMSwgZ2cyLCBnZzMsIG5yb3cgPSAzKQpncmlkLmFycmFuZ2UoZ2cxXzUsZ2cyXzUsZ2czXzUsIG5yb3c9MykKYGBgCmBgYHtyfQpjb3IudGVzdChDT1ZJRGV4Y2Vzc2RyaW5rJFguLkV4Y2Vzc2l2ZS5Ecmlua2luZyxDT1ZJRGV4Y2Vzc2RyaW5rJGxvZzEwY292aWQpCmNvci50ZXN0KENPVklEZXhjZXNzZHJpbmsuNTBfMTAwJFguLkV4Y2Vzc2l2ZS5Ecmlua2luZyxDT1ZJRGV4Y2Vzc2RyaW5rLjUwXzEwMCRsb2cxMGNvdmlkKQpjb3IudGVzdChDT1ZJRGV4Y2Vzc2RyaW5rLmdyZWF0ZXIxMDAkWC4uRXhjZXNzaXZlLkRyaW5raW5nLENPVklEZXhjZXNzZHJpbmsuZ3JlYXRlcjEwMCRsb2cxMGNvdmlkKQpgYGAKCg==